其他
干货 | Elasticsearch 冷热集群架构实战
0、题记
什么是冷热集群架构,Elasticsearch支持吗? Elasticsearch集群如何设置冷热节点? Elasticsearch集群如何根据数据冷热度写入到不同的节点? 当数据不“热”时,如何将数据迁移到“冷”节点? 本文在Elasticsearch7.3版本上一 一给出解答。
1、什么是冷热架构?
1.1 官方解读冷热架构
热数据节点处理所有新输入的数据,并且存储速度也较快,以便确保快速地采集和检索数据。 冷节点的存储密度则较大,如需在较长保留期限内保留日志数据,不失为一种具有成本效益的方法。
1.2 典型应用场景
最大化解决客户反应的响应时间慢
的问题。每日增量6TB日志数据,高峰时段写入及查询频率都较高,集群压力较大,查询ES时,常出现查询缓慢问题。
ES集群的索引写入及查询速度主要依赖于磁盘的IO速度,冷热数据分离的关键为使用SSD磁盘存储热数据,提升查询效率。 若全部使用SSD,成本过高,且存放冷数据较为浪费,因而使用普通SATA磁盘与SSD磁盘混搭,可做到资源充分利用,性能大幅提升的目标。
2、最最核心的实现原理
第一:集群节点层面支持规划节点类型,这是划分热暖节点的前提。 第二:索引层面支持将数据路由到给定节点,这为数据写入冷、热节点做了保障。
https://www.elastic.co/guide/en/elasticsearch/reference/current/allocation-awareness.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-allocation-filtering.html#
3、7.X版本ES实践一把
节点层面设置节点类型。
热节点指定:
方案一:索引层面指定路由。
2{
3 "settings": {
4 "index.routing.allocation.require.hotwarm_type": "hot",
5 "number_of_replicas": 0
6 }
7}
8
9
10PUT /logs_2019-08-01
11{
12 "settings": {
13 "index.routing.allocation.require.hotwarm_type": "warm",
14 "number_of_replicas": 0
15 }
16}
2{
3 "index_patterns": "logs_2019-08-*",
4 "settings": {
5 "index.number_of_replicas": "0",
6 "index.routing.allocation.require.hotwarm_type": "warm"
7 }
8}
9PUT _template/logs_2019-10-template
10{
11 "index_patterns": "logs_2019-10-*",
12 "settings": {
13 "index.number_of_replicas": "0",
14 "index.routing.allocation.require.hotwarm_type": "hot"
15 }
16}
可以看出,两个索引分不到不同的节点上。
随着时间发展,当前数据会成为历史数据。
https://www.elastic.co/guide/en/elasticsearch/client/curator/5.8/command-line.html
步骤1:定义cuator.yml,填写Elasticsearch集群配置信息。
步骤2:定义action.yml。
2 1:
3 action: allocation
4 description: >-
5 Apply shard allocation routing to 'require' 'tag=cold' for hot/cold node
6 setup for logstash- indices older than 3 days, based on index_creation
7 date
8 options:
9 key: hotwarm_type
10 value: warm
11 allocation_type: require
12 disable_action: false
13 filters:
14 - filtertype: pattern
15 kind: prefix
16 value: logs_
17 - filtertype: age
18 source: name
19 direction: older
20 timestring: "%Y-%m-%d"
21 unit: days
22 unit_count: 3
步骤3:执行迁移。
22019-10-13 22:28:31,662 INFO Preparing Action ID: 1, "allocation"
32019-10-13 22:28:31,662 INFO Creating client object and testing connection
42019-10-13 22:28:31,668 INFO Instantiating client object
52019-10-13 22:28:31,668 INFO Testing client connectivity
62019-10-13 22:28:31,675 INFO Successfully created Elasticsearch client object with provided settings
72019-10-13 22:28:31,677 INFO Trying Action ID: 1, "allocation": Apply shard allocation routing to 'require' 'tag=cold' f....
82019-10-13 22:28:31,706 INFO Updating 2 selected indices: ['logs_2019-08-01', 'logs_2019-10-01']
92019-10-13 22:28:31,706 INFO Updating index setting {'index.routing.allocation.require.hotwarm_type': 'warm'}
102019-10-13 22:28:32,559 INFO Action ID: 1, "allocation" completed.
112019-10-13 22:28:32,560 INFO Job completed.
4、坑
5、线上使用场景
热节点使用的是ssd,indexing和search性能都不错,其中保存4天的数据,4天之后数据推到warm节点。 warm节点使用的是hdd。
特点
是:冷节点或者热节点的离群不会影响另外一个种类型节点的功能; 但是如果整个集群中有节点产生stw(Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。),整个集群的性能都会被影响。
相对节约成本的前提下极大的提升性能
,但是不能完全做到一种类型节点的故障对其他类型节点是无感的。6、小结
7、Good 参考深入学习
https://www.elastic.co/cn/blog/deploying-a-hot-warm-logging-cluster-on-the-elasticsearch-service
https://www.elastic.co/cn/blog/hot-warm-architecture-in-elasticsearch-5-x
https://elasticsearch.cn/article/6127
更短时间更快习得更多干货!